var PositionTags = function ( positionId, positionName, tags ){
	// attributes
	this.positionId   = positionId;
	this.positionName = positionName;
	this.setTags      = [];
	this.selectedTags = [];
	
	// variables
	var a = this
		,i = 0
		,s = undefined
		,d = undefined
		;
	
	// tag select handler
	s = function ( e ){
		var id = 0,
			mres = this.id.match(/(\d+)$/);
		if( mres[1] ){
			id = parseInt(mres[1]);
			if( jQuery(this).parent().is('.dpposition_a_o_tag_selected') ){
				jQuery(this).parent().removeClass('dpposition_a_o_tag_selected');
				a.removeTagId(id);
			}else{
				jQuery(this).parent().addClass('dpposition_a_o_tag_selected');
				a.addTagId(id);
			}
		}
		e.preventDefault();
	};
	
	// bind edit handler
	jQuery('#'+this.getDivId())
		.find('div.dpposition_a_position_tags_e').bind('click', function ( e ){
			// show overlay
			a.overlay = new DPOverlay();
			a.overlay.setContent('<div class="dpposition_a_o_top clearfix">'
					+'<div class="dpposition_a_o_title">'+a.positionName+' - kaupunginosat</div>'
					+'<div id="'+a.getDivId('close', true)+'" class="dpposition_a_o_close"></div>'
				+'</div>'
				+'<div class="dpposition_a_o_main">'
					//+'<div class="dpposition_a_o_subtitle">Kaupunginosat</div>'
					+'<div id="'+a.getDivId('districts', true)+'" class="dpposition_a_o_districts clearfix">'
						+'<div class="dpposition_a_o_loading">Ladataan kaupunginosia</div>'
					+'</div>'
					//+'<div class="dpposition_a_o_subtitle">Tagit</div>'
					//+'<div id="'+a.getDivId('tags', true)+'" class="dpposition_a_o_tags clearfix">'
					//	+'<div class="dpposition_a_o_loading">Ladataan tageja</div>'
					//+'</div>'
					//+'<div class="dpposition_a_o_new_tag">'
						+'<form id="'+a.getDivId('form', true)+'" method="post" action="index.php">'
							+'<input type="hidden" name="Itemid" value="'+dppositionParams.Itemid+'" />'
							+'<input type="hidden" name="option" value="com_dpposition" />'
							+'<input type="hidden" name="task" value="settags" />'
							+'<input id="'+a.getDivId('positionid', true)+'" type="hidden" name="positionid" value="'+a.positionId+'" />'
							+'<input id="'+a.getDivId('selected', true)+'" type="hidden" name="selected" value="" />'
					//		+'Uusi tagi: <input class="dpposition_a_o_text" type="text" name="newtag[]" value="" /><br />'
					//		+'Kaupunginosa: <input type="checkbox" name="isdistrict[]" value="1" />'
							+'<input type="hidden" name="newtag[]" value="" />'
							+'<input type="hidden" name="isdistrict[]" value="" />'
						+'</form>'
					//+'</div>'
				+'</div>'
				+'<div class="dpposition_a_o_bottom clearfix">'
					+'<div id="'+a.getDivId('cancel', true)+'" class="dpposition_a_o_cancel">Peruuta</div>'
					+'<div id="'+a.getDivId('send', true)+'" class="dpposition_a_o_send">Tallenna</div>'
				+'</div>');
			
			// populate tags (PositionTags.setTags tells which are already set)
			jQuery.ajax({
				url: "index2.php",
				type: "POST",
				dataType: "json",
				data: {
					option:  'com_dpposition',
					task:    'gettags'
				},
				success: function ( json ){
					if( json.status == 'ok' ){
						// remove all content
						jQuery('#'+a.getDivId('districts', true)).empty();
						jQuery('#'+a.getDivId('tags', true)).empty();
						
						// add tags
						var isSet = false;
						for( i in json.tags ){
							isSet = a.tagIsSet(json.tags[i].dptag_id);
							if( isSet ){
								a.addTagId(json.tags[i].dptag_id);
							}
							//jQuery('#'+(+json.tags[i].dptag_level == 0 ? a.getDivId('districts', true) : a.getDivId('tags', true))).append(
							jQuery('#'+a.getDivId('districts', true)).append(
								'<div class="dpposition_a_o_tag'+(isSet ? ' dpposition_a_o_tag_selected' : '')+'">'
									+'<span id="'+a.getDivId('tag_'+json.tags[i].dptag_id, true)
										+'" class="dpposition_a_o_tag_span">'+json.tags[i].dptag_name+'</span>'
								+'</div>'
							);
						}
						
						// bind select
						jQuery('#'+a.getDivId('districts', true)).find('span.dpposition_a_o_tag_span').bind('click', s);
						jQuery('#'+a.getDivId('tags', true)).find('span.dpposition_a_o_tag_span').bind('click', s);
					}else if( json.status == 'error' ){
						alert(json.error);
					}
				}
			});
			
			// bind ok
			jQuery('#'+a.getDivId('send', true)).bind('click', function ( e ){
				a.submitData();
				e.preventDefault();
			});
			
			// bind close and cancel
			var c = function ( e ){
				a.closeOverlay(true);
				e.preventDefault();
			};
			jQuery('#'+a.getDivId('close', true)).bind('click', c);
			jQuery('#'+a.getDivId('cancel', true)).bind('click', c);
			
			// prevent default
			e.preventDefault();
		});
	
	// set current tags
	d = jQuery('#'+this.getDivId()).find('div.dpposition_a_position_tags')
	d.find('div.dpposition_a_position_tag').remove();
	for( i in tags ){
		d.append('<div id="'+this.getDivId('tag_'+tags[i].dptag_id)+'" class="dpposition_a_position_tag">'+tags[i].dptag_name+'</div>');
		this.setTags.push(tags[i].dptag_id);
	}
};

// methods
PositionTags.prototype = {
	getDivId: function ( name, overlay ) {
		return 'dpposition_a'+(overlay ? '_o' : '')+'_position_'+this.positionId+(name ? '_'+name : '');
	},
	
	tagIsSet: function ( id ) {
		var k = 0,
			i = 0;
		for( k in this.setTags ){
			if( id == this.setTags[k] ){
				return true;
			}
			i += 1;
		}
		return false;
	},
	
	addTagId: function ( id ) {
		this.selectedTags.push(id);
	},
	
	removeTagId: function ( id ) {
		var k = 0,
			i = 0;
		for( k in this.selectedTags ){
			if( id == this.selectedTags[k] ){
				this.selectedTags.splice(i, 1);
				return true;
			}
			i += 1;
		}
		return false;
	},
	
	closeOverlay: function ( reset ) {
		this.overlay.remove();
		if( reset ){
			this.selectedTags = [];
		}
	},
	
	submitData: function ( ) {
		// post the data
		jQuery('#'+this.getDivId('selected', true)).val(this.selectedTags.toString());
		jQuery('#'+this.getDivId('positionid', true)).val(this.positionId);
		jQuery('#'+this.getDivId('form', true)).get(0).submit();
		this.closeOverlay();
	}
};